import router from '@/router';
import {getToken} from '@/utils/auth'
import { useUserStore } from './stores/user';
import { usePermissionStore } from './stores/permission';
const WHITE_LIST = ['/login'];
router.beforeEach(async (to)=>{
    const userStore = useUserStore();
    const permissionStore = usePermissionStore();
    const token = getToken();
    if(token){
        //如果你已经登录了，还去访问登录页，则会自动跳转到/home页
        if(to.path === '/login'){
            return {path:'/home',replace:true};
        }
        //此处要先获取用户的角色
        const roles = userStore.state.roles;
        if(roles){//如果已经有角色了，说明此用户已经获取过用户信息了
            return true;
        }
        await userStore.getUserInfo();
        const accessRoutes = await permissionStore.generateRoutes();
        //把有权限的路由添加到路由配置中
        accessRoutes.forEach(router.addRoute);
        return router.push(to.path);
    }
    //你访问的路径是在白名单里面的话，没有登录也可以访问
    if(WHITE_LIST.includes(to.path)){
        return true;
    }
    //如果没有登录，访问的路径也不在白名单里 ，不行了，需要跳到登录页登录
    return {
        path:'/login',
        query:{redirect:to.path,...to.query}//跳到登录页的时候要携带原来想访问的路径
    }
});
/**
 * 在用户登录成功之后，要根据用户的权限来决定显示的菜单和路由配置项
 * 先获取用户信息，再获取用户的角色，再根据用户的角色获取对应的菜单
 * 再用菜单过滤路由
 */